home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / oper_sys / mach / amiga / scsi9091.lzh / crt0.c < prev    next >
Encoding:
C/C++ Source or Header  |  1991-02-24  |  1.7 KB  |  74 lines

  1. #include <exec/types.h>
  2. #include <exec/execbase.h>
  3. #include <exec/nodes.h>
  4. #include <exec/resident.h>
  5. #include <exec/errors.h>
  6. #include <libraries/expansionbase.h>
  7. #include <libraries/configvars.h>
  8. #include <devices/trackdisk.h>
  9.  
  10. /*
  11.  * Set SysBase to a local variable, that loads directly from 4 when it
  12.  * has to be reloaded
  13.  */
  14. #define BASE_EXT_DECL
  15. #define BASE_NAME (*(void **)4)
  16. #include <inline/exec.h>
  17. #include <inline/expansion.h>
  18.  
  19. #include <stddef.h>
  20.  
  21. #include "device.h"
  22.  
  23. /*
  24.  * ATTENTION: this whole file is HEAVILY compiler dependent! It uses
  25.  * several tricks to convince gcc to put certain DATA into the TEXT
  26.  * part of the object file... the resident-tag HAS to be in the first
  27.  * hunk, so this kludge is necessary...
  28.  */
  29.  
  30. /* this trick makes "main" the ENTRY of the whole file... */
  31. int main() asm(".begin"); /* don't use _main, use .begin for this symbol */
  32.  
  33. int
  34. main()
  35. {
  36.   /* return an error, if the user tried to run us */
  37.   return 20;
  38. }
  39.  
  40. /*
  41.  * this trick is quite dirty... we need to garantee, that our init-tag
  42.  * goes into the code-hunk. Only in this arrangement, this seems to
  43.  * work... this depends too on the fact, that we will compile this file
  44.  * with the -fwritable-strings option:-))
  45.  * HACK HACK HACK HACK... 
  46.  */
  47.  
  48. static char *foo = SCSI_NAME;
  49. static char *foo2 = SCSI_IDSTRING;
  50.  
  51. /* linker-symbol: end of code-hunk */
  52. extern void end();
  53. extern ulong Init[];
  54.  
  55. /*
  56.  * gcc now thinks we're already in the .data part, and will not produce
  57.  * a .data before the struct definition, therefore it's safe to output
  58.  * the switch to .text mode 
  59.  */
  60. asm(".text");
  61. struct Resident initDDescrip = {
  62.   RTC_MATCHWORD,
  63.   &initDDescrip,
  64.   (APTR)end,
  65.   RTF_AUTOINIT,
  66.   SCSI_VERSION,
  67.   NT_DEVICE,
  68.   SCSI_PRIORITY,
  69.   SCSI_NAME,
  70.   SCSI_IDSTRING,
  71.   (APTR)Init,
  72. };
  73. asm ("    .data");
  74.